package com.akkainaction.mailbox.config.mailbox;

import akka.actor.ActorSystem;
import akka.dispatch.PriorityGenerator;
import akka.dispatch.UnboundedStablePriorityMailbox;
import com.typesafe.config.Config;

/**
 * 自定义的优先级队列
 */
public class UnboundedPriorityMailbox extends UnboundedStablePriorityMailbox {

    /**
     * 在该类中，需要定义一个带有ActorSystem.Settings和Config参数的构造方法，
     * 这个构造方法会在系统创建MailBox时反射调用。在构造方法中，需要给出一个PriorityGenerator对象，
     * 并重写gen方法，这个方法就是我们匹配消息优先级的地方，该方法返回值越小，则优先级越高。
     */
    public UnboundedPriorityMailbox(ActorSystem.Settings settings, Config config) {
        super(new PriorityGenerator() {
            @Override
            public int gen(Object msg) {
                if (msg.equals("张三")) {
                    return 0;
                } else if (msg.equals("李四")) {
                    return 1;
                } else if (msg.equals("王五")) {
                    return 2;
                } else {
                    return 3;
                }
            }
        });
    }
}
